package com.shuiyihan.design.structure.proxy.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 代理人
 *
 * @since 2021/8/27
 **/
public class JdkMedium implements InvocationHandler {


    //被代理对象
    private Object instance;

    public JdkMedium(Object instance) {
        this.instance = instance;
    }

    /**
     * 代理过程
     *
     * @param proxy  被代理对象的字节码-存在内存中,不会创建新类
     * @param method 用户调用的方法
     * @param args   被调用方法的参数
     * @return  被代理对象实例
     * @throws Throwable 异常
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        args[0] = "我又带 " + args[0];

        return method.invoke(instance,args);
    }
}
